#ifndef ZHILAISDK_H_
#define ZHILAISDK_H_

#if defined(_WIN32) || defined(WIN32)
#    if defined(ZLDEVICE_EXPORT)
#        define ZLDEVICE_API __declspec(dllexport)
#    else
#        define ZLDEVICE_API __declspec(dllimport)
#    endif  // ZLBASE_EXPORT
#else
#    define ZLDEVICE_API
#endif

#if defined(__cplusplus)
#    define ZLDEVICE_BEGIN_EXPORT \
        extern "C"                \
        {
#    define ZLDEVICE_END_EXPORT }
#else
#    define ZLDEVICE_BEGIN_EXPORT
#    define ZLDEVICE_END_EXPORT
#endif  // __cplusplus

#include <stdint.h>

ZLDEVICE_BEGIN_EXPORT

// init zhilaiSDK
ZLDEVICE_API int32_t ZLInitialize();

// uninitialize zhilaiSDK
ZLDEVICE_API void ZLUninitialize();

/// \brief 全局错误码
enum ZLResult
{
    ZLResult_Fail = -1,         ///< 失败，当接口返回该错误码时，表示接口未实现或者操作不支持
    ZLResult_Success = 0,       ///< 成功
                                ///<
    ZLResult_Unconnected,       ///< 链路未连接
    ZLResult_OpenFailed,        ///< 链路通信错误码
    ZLResult_Closed,            ///< 链路已关闭
    ZLResult_WriteFailed,       ///< 链路写失败
    ZLResult_WriteTimeout,      ///< 链路写超时
    ZLResult_ReadFailed,        ///< 链路读失败
    ZLResult_ReadTimeout,       ///< 链路读超时
    ZLResult_InvalidData,       ///< 协议处理过程中出现的错误码
    ZLResult_InvalidParams,     ///< 设备回复的数据不正确，一般是指令序号不匹配，地址为不匹配或者
    ZLResult_InvalidDialUp,     ///<
    ZLResult_InvalidBcc,        ///< 设备回复的数据BCC校验不正确
    ZLResult_InvalidColumn,     ///< 设备回复的数据板号不匹配
    ZLResult_UnmatchedColumn,   ///< 发送的指令中板号与设备实际的板号不匹配
    ZLResult_ExecutionFailed,   ///< 发出的指令执行失败，一般为指令数据有误或者设备执行失败
    ZLResult_BoxnumOutofRange,  ///< 发出的指令中箱号不合法

    ZLResult_End = 0xFF000000
};

ZLDEVICE_END_EXPORT

#endif  // ZHILAISDK_H_